/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upc.galaxy.dao.impl;

import edu.upc.galaxy.dao.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;

//import com.coneccion.conecta;
import edu.upc.galaxy.entity.AlquilerEntity;
import org.springframework.stereotype.Repository;

@Repository
public class AlquilerDaoImpl {
    
    Connection cn = null;
    CallableStatement cs = null;
    ResultSet rs = null;
    AlquilerEntity entidad = null;
    Collection<AlquilerEntity> lista = null;
    
    public Collection<AlquilerEntity> mostrarAlquileres() throws Exception{
    	
		try{
    //		  new conecta();
 //			  cn = conecta.obtenerConexion();
    	      cs = cn.prepareCall("{call usp_listar_reservas()}");
    	      rs = cs.executeQuery();
    	      lista = new ArrayList<AlquilerEntity>();
    	       while(rs.next()){
    	    	   entidad = new AlquilerEntity();
    	    	   entidad.setCodalquiler(Integer.parseInt(rs.getString(1)));
    	    	   entidad.setFechaatencion(rs.getString(2));
    	    	   entidad.setHora(rs.getString(3));
    	    	   entidad.setDisponible(rs.getString(4));
    	    	   entidad.setNombre(rs.getString(5));
    	           lista.add(entidad);
    	           }
    	       rs.close();
    	       cs.close();
    	       cn.close();
    	}catch (SQLException e) {
       	 e.printStackTrace();
        }
    	
    	return lista;
    }
    
    
    public void registrarUnAlquiler(AlquilerEntity entidad) throws Exception {
      	 try {
   //            new conecta();
   //			   cn = conecta.obtenerConexion();
               cs = cn.prepareCall("{call usp_insertar_reservas (?,?,?)}");
               cs.setString(1, entidad.getFechaatencion());
               cs.setString(2, entidad.getHora());
               cs.setInt(3, entidad.getCodcancha());
               cs.executeQuery();
               cs.close();
               cn.close();
           } catch (SQLException e) {
          	 e.printStackTrace();
           }
      }
    
    public void registrarAlquiler(AlquilerEntity entidad) throws Exception {
     	 try {
    //          new conecta();
  //			  cn = conecta.obtenerConexion();
  			  
  			 if(existeAlquiler(entidad.getFechaatencion(),entidad.getHora(),entidad.getCodcancha()).size()!=0)
				 throw new RuntimeException("La cancha ya se encuentra reservada!");
  			  
              cs = cn.prepareCall("{call usp_insertar_reservas (?,?,?)}");
              cs.setString(1, entidad.getFechaatencion());
              cs.setString(2, entidad.getHora());
             cs.setInt(3, entidad.getCodcancha());
              cs.executeQuery();
              cs.close();
             cn.close();
          } catch (SQLException e) {
         	 e.printStackTrace();
          }
     }
    
    
    
 	 public Collection<AlquilerEntity> existeAlquiler(String fechaatencion , String hora , int codcancha ) throws Exception{
    	
 		 try{
 	//		  new conecta();
 	//		  cn = conecta.obtenerConexion();
 		      cs = cn.prepareCall("{call usp_existe_cancha_reservada(?,?,?)}");
 		      cs.setString(1, fechaatencion);
 		      cs.setString(2, hora);
 		      cs.setInt(3, codcancha);
 		      rs = cs.executeQuery();
 		      lista = new ArrayList<AlquilerEntity>();
 		       while(rs.next()){
 		    	   entidad = new AlquilerEntity();
 		    	   entidad.setCodalquiler(Integer.parseInt(rs.getString(1)));
 		           lista.add(entidad);
 		           }
 		}catch (SQLException e) {
 	  	 e.printStackTrace();
 	   }
 		
 		return lista;
 	    }
    
    
    
}
